#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=100050;
int T;
ll n,m,L,V;
ll d[N],v[N],p[N],a[N],cnp[N],cnt=0,dans=0,ans=0;
bool spead[N];
void solve(){
    scanf("%lld%lld%lld%lld",&n,&m,&L,&V);
    for(int i=1;i<=n;i++){
        scanf("%lld%lld%lld",&d[i],&v[i],&a[i]);
    };
    for(int i=1;i<=m;i++){
        scanf("%lld",&p[i]);
    }
    memset(spead,0,sizeof(spead));
    for(int i=1;i<=n;i++){
        if(a[i]==0){
            if(v[i]>V){
                for(int j=m;j>=1;j--){
                    if(p[j]>=d[i]){cnp[j]++;spead[i]=true;}
                }
            }
        }
        if(a[i]<0){
            if(v[i]<=V)break;
            else {
                float s=d[i]+1.0*(V*V-v[i]*v[i])/2*a[i];
                for(int j=1;p[j]*1.0<s&&j<=m;j++){
                    if(p[j]>=d[i]){
                        cnp[j]++;
                        spead[i]=true;
                    }
                }
            }
        }
        if(a[i]>0){
            if(v[i]<=V){
                float s=d[i]+1.0*(V*V-v[i]*v[i])/2*a[i];
                for(int j=m;p[j]*1.0>s&&j>=1;j--){
                    cnp[j]++;
                    spead[i]=true;
                }
            }
            else{
                for(int j=n;j>=1&&p[j]>=d[i];j--){
                    cnp[j]++;
                    spead[i]=true;
                }
            }
        }
        if(spead[i])cnt++;
    }
    for(int j=1;j<=m;j++){
        if(cnp[j]==cnt)dans++;
    }
    ans=cnt-dans;
    printf("%lld %lld",cnt,ans);
};

int main(){
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    scanf("%d",&T);
    while(T--){
        solve();
        if(T)cout<<endl;
    }
}